home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 039a / bccapp.zip / MENU.H < prev    next >
C/C++ Source or Header  |  1991-09-15  |  5KB  |  194 lines

  1. /*
  2.  *
  3.  *    Public header file for menu/popup system
  4.  *
  5.  * (C) 1990 Vision Software
  6.  *
  7.  * $Id: menu.h 1.2001 91/04/25 15:06:43 pcalvin release $
  8.  *
  9.  * Comments:
  10.  *
  11.  *    We #include <dbase.h> for VSCROLL
  12.  *
  13.  * Bugs:
  14.  *
  15.  * None documented
  16.  *
  17.  */
  18.  
  19. #if (!defined(__MENU__))
  20. #define __MENU__
  21.  
  22. #if (!defined(__ADL__))
  23. #include <adl.h>
  24. #endif
  25.  
  26. #if (!defined(__DATABASE__))
  27. #include <dbase.h>
  28. #endif
  29.  
  30. /*
  31.  * Menu Entries
  32.  */
  33. typedef UINT CENT;                    /* Count of Entries */
  34. STATIC CONST CENT centNil = 0;
  35. STATIC CONST CENT centError = -1;    /* Error value.. */
  36.  
  37. struct ENT
  38.     {
  39.     SZ sz;                                /* Text for menu entry */
  40.     CCH cchHotKey;                        /* Index into Hotkey */
  41.     VOID (*pfnFunction)();            /* Function for selected item */
  42.     SZ szQuickHelp;                    /* Text at bottom row of the screen */
  43.  
  44.     CENT centNext;                        /* Number of adjacent entries */
  45.     ENT *pentNext;                        /* Poping menus to the side.. */
  46.     };
  47. typedef ENT *PENT;                    /* Array of entries */
  48. STATIC CONST PENT pentNil = 0;
  49.  
  50. /*
  51.  * Menu Head
  52.  */
  53. struct BAR
  54.     {
  55.     SZ sz;                            /* Text for heading */
  56.     CCH cchHotKey;                    /* Hotkey */
  57.     CENT cent;                        /* Number of entries in menu */
  58.     PENT pent;                        /* Pointer to an array of cent items */
  59.     };
  60. typedef BAR *PBAR;
  61. typedef INT CBAR;
  62. STATIC CONST CBAR cbarNil = 0;
  63. STATIC CONST PBAR pbarNil = 0;
  64.  
  65. /*
  66.  * Generic menus system.
  67.  * May be used as standalone popup menus
  68.  * Also used as a base class for Pulldowns && scrollboxes..
  69.  */
  70. class POPUP
  71.     {
  72. public:
  73.     POPUP(ROW row,COL col,CENT cent,PENT pent,SZ sz=szNil);
  74.     CENT CentGet();
  75. protected:
  76.     POPUP(SZ sz = szNil);
  77.     CENT CentGet(ROW row,COL col,CENT cent,PENT pent);
  78.     VIRTUAL VOID Redraw();
  79.     VIRTUAL VOID Display(CENT cent,PENT pent,WINDOW &rwnd,BOOL fHigh);
  80.     VIRTUAL BOOL FHandleCd(CENT &rcent,CD cd,PENT pent,WINDOW &rwnd);
  81.     VOLATILE SZ SzFromCentPent(CENT cent,PENT pent);
  82.     CD CdExitKey();
  83.     CENT centMax;
  84.     WINDOW wnd;
  85.     HELP help;
  86. private:
  87.     VIRTUAL COL ColLeftFromCentPent(CENT cent,PENT pent);
  88.     VIRTUAL ROW RowTopFromCentPent(CENT cent,PENT pent);
  89.     VIRTUAL COL CcolFromCentPent(CENT cent,PENT pent);
  90.     VIRTUAL ROW CrowFromCentPent(CENT cent,PENT pent);
  91.     VOID Show();
  92.     VOID Hide();
  93.     VOID Flash(CENT cent,PENT pent,WINDOW &rwnd);
  94.     BOOL FSubMenuFromCentPent(CENT cent,PENT pent);
  95.     ROW rowTop,rowBottom;
  96.     COL colLeft,colRight;
  97.     ROW rowMax;
  98.     PENT pentBase;
  99.     CENT centAnswer;
  100.     CD cdLastKey;
  101.     CCH cchMenuMax;
  102.     SZ szTitle;
  103.     };
  104.  
  105. /*
  106.  * Scroll boxes are simply dynamic popups..
  107.  */
  108. class SCROLL : public POPUP
  109.     {
  110. public:
  111.     SCROLL(ROW row,COL col,CENT cent,PENT pent,CENT centView,SZ sz=szNil);
  112. protected:
  113.     VIRTUAL VOID Display(CENT cent,PENT pent,WINDOW &rwnd,BOOL fSelected);
  114.     VIRTUAL ROW CrowFromCentPent(CENT cent,PENT pent);
  115.     VIRTUAL BOOL FHandleCd(CENT &rcent,CD cd,PENT pent,WINDOW &rwnd);
  116.     VOID KeepInView(CENT cent);
  117.     CENT centTop;
  118.     CENT centViewMax;
  119.     ROW rowBase;
  120.     };
  121.  
  122. /*
  123.  * Virtual scroll boxes are just scroll boxes that take the entries
  124.  * from a file..
  125.  *    In this specific case, the scroll box entry is the index key.
  126.  */
  127. class VSCROLL : public SCROLL
  128.     {
  129. public:
  130.     VSCROLL(ROW row,COL col,CENT centView,DATABASE &rdtb,SZ sz = szNil,CCH cch = cchNil,SZ szTitle = szNil);
  131. protected:
  132.     VIRTUAL VOID Redraw();
  133.     VIRTUAL VOID Display(CENT cent,PENT pent,WINDOW &rwnd,BOOL fSelected);
  134.     VIRTUAL COL CcolFromCentPent(CENT cent,PENT pent);
  135.     VIRTUAL ROW CrowFromCentPent(CENT cent,PENT pent);
  136.     VIRTUAL BOOL FHandleCd(CENT &rcent,CD cd,PENT pent,WINDOW &rwnd);
  137.     DATABASE &rdtb;
  138.     CCH cchIndex;
  139.     SZ szIndex;
  140.     };
  141.  
  142. /*
  143.  * The pulldown system uses each menu as a special case of the
  144.  * Popup system we just declared...
  145.  */
  146. class PULLDOWN : private POPUP
  147.     {
  148. public:
  149.     PULLDOWN(ROW row,CBAR cbar,BAR *pbar);
  150.     VOID ShowBar();
  151.     CD CdGet();
  152. private:
  153.     VIRTUAL BOOL FHandleCd(CENT &rcent,CD cd,PENT pent,WINDOW &rwnd);
  154.     CD CdFromAltCd(CD cd);
  155.     ROW rowDisplay;
  156.     SZ szHotKeys;
  157.     COL *pcolTabs;
  158.     CBAR cbarMax;
  159.     BAR *pbar;
  160.     BOOL fLeftExit;
  161.     BOOL fRightExit;
  162.     };
  163.  
  164. /*
  165.  * Dialog boxes.
  166.  */
  167. class DIALOG : public POPUP
  168.     {
  169. public:
  170.     DIALOG(SZ sz,CENT centMax,PENT pent);
  171.     ~DIALOG();
  172. protected:
  173.     VIRTUAL VOID Redraw();
  174. private:
  175.     VIRTUAL COL ColLeftFromCentPent(CENT cent,PENT pent);
  176.     VIRTUAL ROW RowTopFromCentPent(CENT cent,PENT pent);
  177.     VIRTUAL COL CcolFromCentPent(CENT cent,PENT pent);
  178.     VIRTUAL ROW CrowFromCentPent(CENT cent,PENT pent);
  179.     VIRTUAL BOOL FHandleCd(CENT &rcent,CD cd,PENT pent,WINDOW &rwnd);
  180.     VIRTUAL VOID Display(CENT cent,PENT pent,WINDOW &rwnd,BOOL fHigh);
  181.     CCH CchFromCentPent(CENT cent,PENT pent);
  182.     CCH cchWidth;
  183.     COL *pcolTabs;
  184.     COL dcolButtons;
  185.     SZ szLine;
  186.     };
  187.  
  188. /*
  189.  *    Standard menu.  Usually appears first under "System" header
  190.  */
  191. EXTERN ENT pentVision[];
  192.  
  193. #endif    /* !defined(__MENU__) */
  194.